package com.core.cloudbusiness.system.trace.service;

import java.util.List;
import java.util.Map;

/**
 * @author =====Lqj=====
 * @className TraceQueryService
 * @description 链路追踪查询服务接口
 * @create 2024/12/17 10:30
 **/
public interface TraceQueryService {

    /**
     * 根据链路ID查询所有相关日志
     * @param traceId 链路ID
     * @return 日志列表
     */
    List<Map<String, Object>> queryLogsByTraceId(String traceId);

    /**
     * 根据链路ID查询请求链路信息
     * @param traceId 链路ID
     * @return 链路信息
     */
    Map<String, Object> queryTraceInfo(String traceId);

    /**
     * 根据链路ID查询业务操作记录
     * @param traceId 链路ID
     * @return 业务操作记录
     */
    List<Map<String, Object>> queryBusinessOperations(String traceId);

    /**
     * 根据链路ID查询数据库操作记录
     * @param traceId 链路ID
     * @return 数据库操作记录
     */
    List<Map<String, Object>> queryDatabaseOperations(String traceId);

    /**
     * 根据链路ID查询外部接口调用记录
     * @param traceId 链路ID
     * @return 外部接口调用记录
     */
    List<Map<String, Object>> queryExternalCalls(String traceId);

    /**
     * 根据链路ID查询缓存操作记录
     * @param traceId 链路ID
     * @return 缓存操作记录
     */
    List<Map<String, Object>> queryCacheOperations(String traceId);

    /**
     * 根据链路ID查询性能监控记录
     * @param traceId 链路ID
     * @return 性能监控记录
     */
    List<Map<String, Object>> queryPerformanceRecords(String traceId);

    /**
     * 根据链路ID查询安全事件记录
     * @param traceId 链路ID
     * @return 安全事件记录
     */
    List<Map<String, Object>> querySecurityEvents(String traceId);

    /**
     * 根据链路ID查询完整的链路追踪报告
     * @param traceId 链路ID
     * @return 完整的链路追踪报告
     */
    Map<String, Object> queryFullTraceReport(String traceId);

    /**
     * 根据用户ID和时间范围查询链路ID列表
     * @param userId 用户ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 链路ID列表
     */
    List<String> queryTraceIdsByUser(Long userId, Long startTime, Long endTime);

    /**
     * 根据请求URI和时间范围查询链路ID列表
     * @param requestUri 请求URI
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 链路ID列表
     */
    List<String> queryTraceIdsByUri(String requestUri, Long startTime, Long endTime);

    /**
     * 查询慢请求的链路ID列表
     * @param threshold 耗时阈值（毫秒）
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 链路ID列表
     */
    List<String> querySlowTraceIds(Long threshold, Long startTime, Long endTime);
}
